#include "ListeEtats.h"
#include "Etat.h"

#include <stdexcept>

typedef vector<Etat*>::iterator etatItr;
typedef vector<Etat*>::const_iterator constEtatItr;

ListeEtats::ListeEtats()
{

}

ListeEtats::~ListeEtats()
{

}

void ListeEtats::addEtat(Etat* etat)
{
	etats.push_back(etat);
}

Etat* ListeEtats::getEtat(unsigned index) const
{
	if (index < etats.size())
		return etats[index];
	else
		throw std::logic_error("ListeEtats::getEtat(unsigned):\n Index trop grand");
}

unsigned ListeEtats::size() const
{
	return etats.size();
}

Etat* ListeEtats::searchEtat(unsigned id) const
{
	for (constEtatItr it = etats.begin(); it != etats.end(); ++it)
	{
		if ((*it)->getId() == id)
			return *it;
	}
	return nullptr;
}

void ListeEtats::purgerEtats()
{
	for (etatItr it = etats.begin(); it != etats.end(); ++it)
	{
		delete *it;
	}
}

Etat* ListeEtats::operator[](unsigned index) const
{
	if (index < etats.size())
		return etats[index];
	else
		return nullptr;
}

void ListeEtats::retirerEtat(unsigned id)
{
	for (etatItr it = etats.begin(); it != etats.end(); ++it)
	{
		if ((*it)->getId() == id)
		{
			it = etats.erase(it);
			break;
		}		
	}
}
